package Vista;

import Controlador.Controlador;
import Modelo.*;
import java.awt.Choice;
import java.awt.Color;
import java.awt.*;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;


public class Vista extends JPanel{

public JLabel p,r1,r2,r3,r4;
public JFrame frame1;
public Controlador controlador;
public Modelo modelo;
public JButton guar1;
public JButton acep1,canc2,canc1,comenzar;
public JLabel primera,respv,resp1,resp2,resp3,name,pre,opca,opcb,opcc,opcd;
public JLabel opcav,opcbv,opccv,opcdv,opcar,opcbr,opccr,opcdr;
public JLabel pregunta,administrador,cate;
public JPasswordField clave;
public JTextArea question,n;
public JTextArea resv,res1,res2,res3;
public JFrame frame2,framenp;
public Choice categoria;
public String nombre_jugador;
public ImageIcon ti1,ti2;
public Image fuerati,dentroti;
public Timer t;
public int angulo=360;
public int contador=60;
public int nump;
public static  JMenuBar barraMenu = new JMenuBar();
public static  JMenu menuJuego = new JMenu("Juego");
public static  JMenuItem nuevo = new JMenuItem("Nueva Partida");
public static  JMenuItem cargar = new JMenuItem("Cargar Partida");
public static  JMenu menuAdministrador = new JMenu("Administrar");
public static  JMenuItem Agregar = new JMenuItem("Agregar Pregunta");
public static  JMenuItem listar = new JMenuItem("Listar Preguntas");
public int limpiar=0;
public Respuesta aaa[],rsel;
public Random or;
int v[];
public boolean selec;

public Vista(){


}
    public Vista(JFrame fram1, Modelo mod){



        frame1=fram1;
        modelo=mod;
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLayout(null);
        nump=1;
       pre=new JLabel(new ImageIcon("pregunta.png"));
       opca=new JLabel(new ImageIcon("opciona.png"));
       opcb=new JLabel(new ImageIcon("opcionb.png"));
       opcc=new JLabel(new ImageIcon("opcionc.png"));
       opcd=new JLabel(new ImageIcon("opciond.png"));

       opcav=new JLabel(new ImageIcon("opcionaverde.png"));
       opcbv=new JLabel(new ImageIcon("opcionbverde.png"));
       opccv=new JLabel(new ImageIcon("opcioncverde.png"));
       opcdv=new JLabel(new ImageIcon("opciondverde.png"));

       opcar=new JLabel(new ImageIcon("opcionarojo.png"));
       opcbr=new JLabel(new ImageIcon("opcionbrojo.png"));
       opccr=new JLabel(new ImageIcon("opcioncrojo.png"));
       opcdr=new JLabel(new ImageIcon("opciondrojo.png"));


       pre.setBounds(0,300,600,82);
       opca.setBounds(0,400,300,50);
       opcb.setBounds(300,400,300,50);
       opcc.setBounds(0,460,300,50);
       opcd.setBounds(300,460,300,50);

       opcav.setBounds(0,400,300,50);
       opcbv.setBounds(300,400,300,50);
       opccv.setBounds(0,460,300,50);
       opcdv.setBounds(300,460,300,50);

       opcar.setBounds(0,400,300,50);
       opcbr.setBounds(300,400,300,50);
       opccr.setBounds(0,460,300,50);
       opcdr.setBounds(300,460,300,50);


       frame1.getContentPane().add(pre,0);
       frame1.getContentPane().add(opca,0);
       frame1.getContentPane().add(opcb,0);
       frame1.getContentPane().add(opcc,0);
       frame1.getContentPane().add(opcd,0);

       frame1.getContentPane().add(opcav,0);
       frame1.getContentPane().add(opcbv,0);
       frame1.getContentPane().add(opccv,0);
       frame1.getContentPane().add(opcdv,0);

       frame1.getContentPane().add(opcar,0);
       frame1.getContentPane().add(opcbr,0);
       frame1.getContentPane().add(opccr,0);
       frame1.getContentPane().add(opcdr,0);

       pre.setVisible(false);
       opca.setVisible(false);
       opcb.setVisible(false);
       opcc.setVisible(false);
       opcd.setVisible(false);

       opcav.setVisible(false);
       opcbv.setVisible(false);
       opccv.setVisible(false);
       opcdv.setVisible(false);

       opcar.setVisible(false);
       opcbr.setVisible(false);
       opccr.setVisible(false);
       opcdr.setVisible(false);



    menuJuego.add(nuevo);
    menuJuego.addSeparator();
    menuJuego.add(cargar);
    menuAdministrador.add(Agregar);
    menuAdministrador.add(listar);
    barraMenu.add(menuJuego);
    barraMenu.add(menuAdministrador);
    frame1.setJMenuBar(barraMenu);
    frame1.pack();
    frame1.setBounds(250,100,600,600);


        ImageIcon millonario=new ImageIcon("qq.jpg");
        primera=new JLabel(millonario);
        primera.setBounds(140,1,290,246);
        primera.setVisible(true);
        //frame1.getContentPane().add(primera);
        
        pregunta=new JLabel("Pregunta: ");
        pregunta.setBounds(100,20,80,20);
        pregunta.setVisible(false);
        frame1.getContentPane().add(pregunta);
        
        respv=new JLabel("Respuesta Correcta: ");
        respv.setBounds(25,120,160,20);
        respv.setVisible(false);
        frame1.getContentPane().add(respv);
        
        resp1=new JLabel("Respuesta falsa 1: ");
        resp1.setBounds(40,170,160,20);
        resp1.setVisible(false);
        frame1.getContentPane().add(resp1);
        
        resp2=new JLabel("Respuesta falsa 2: ");
        resp2.setBounds(40,220,160,20);
        resp2.setVisible(false);
        frame1.getContentPane().add(resp2);
        
        resp3=new JLabel("Respuesta falsa 3: ");
        resp3.setBounds(40,270,160,20);
        resp3.setVisible(false);
        frame1.getContentPane().add(resp3);
        
        cate=new JLabel("Categoria: ");
        cate.setBounds(40,320,160,20);
        cate.setVisible(false);
        frame1.getContentPane().add(cate);
        
        frame2=new JFrame("Administrador");
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setBounds(400,200,300,200);
        frame2.setVisible(false);
        frame2.setResizable(false);
        frame2.setLayout(null);


        //frame solicitud nombre jugador para nueva partida
        framenp=new JFrame("Nueva Partida");
        framenp.setBounds(400,200,300,200);
        framenp.setVisible(false);
        framenp.setResizable(false);
        framenp.setLayout(null);
        name=new JLabel("Ingrese Nombre Jugador");
        name.setBounds(65,30,150,50);
        framenp.getContentPane().add(name);
        n=new JTextArea();
        n.setBounds(90,70,100,25);
        framenp.getContentPane().add(n);
        comenzar=new JButton("Comenzar");
        comenzar.setBounds(90,110,100,25);
        framenp.getContentPane().add(comenzar);

        
        administrador=new JLabel("Ingrese la clave de Administrador.");
        administrador.setBounds(25,10,220,20);
        administrador.setVisible(true);
        frame2.getContentPane().add(administrador);
        
        clave=new JPasswordField();
        clave.setBounds(100,50,100,20);        
        clave.setVisible(true);
        frame2.getContentPane().add(clave);
        
        acep1=new JButton("Aceptar");
        acep1.setBounds(40,100,100,20);
        acep1.setVisible(true);
        frame2.getContentPane().add(acep1);
        
        canc1=new JButton("Cancelar");
        canc1.setBounds(160,100,100,20);
        canc1.setVisible(true);
        frame2.getContentPane().add(canc1);
        
        question=new JTextArea("");
        question.setBounds(180,20,250,80);
        question.setVisible(false);
        frame1.getContentPane().add(question);
        
        resv=new JTextArea("");
        resv.setBounds(180,120,250,40);
        resv.setVisible(false);
        frame1.getContentPane().add(resv);
        
        res1=new JTextArea("");
        res1.setBounds(180,170,250,40);
        res1.setVisible(false);
        frame1.getContentPane().add(res1);
        
        res2=new JTextArea("");
        res2.setBounds(180,220,250,40);
        res2.setVisible(false);
        frame1.getContentPane().add(res2);
        
        res3=new JTextArea("");
        res3.setBounds(180,270,250,40);
        res3.setVisible(false);
        frame1.getContentPane().add(res3);
        
        guar1=new JButton("Guardar");
        guar1.setBounds(100,420,150,20);
        guar1.setVisible(false);
        frame1.getContentPane().add(guar1);
        
        canc2=new JButton("Cancelar");
        canc2.setBounds(280,420,150,20);
        canc2.setVisible(false);
        frame1.getContentPane().add(canc2);
        
        categoria=new Choice();
        categoria.setBounds(180,320,250,25);
        categoria.addItem("1");
        categoria.addItem("2");
        categoria.addItem("3");
        categoria.addItem("4");
        categoria.addItem("5");
        categoria.addItem("6");
        categoria.addItem("7");
        categoria.addItem("8");
        categoria.addItem("9");
        categoria.addItem("10");
        categoria.addItem("11");
        categoria.addItem("12");
        categoria.addItem("13");
        categoria.addItem("14");
        categoria.addItem("15");
        categoria.setVisible(false);
        frame1.getContentPane().add(categoria);
            r1=new JLabel();
            r2=new JLabel();
            r3=new JLabel();
            r4=new JLabel();
           or = new Random();
        r1.setBounds(65,400,300,50);
            r1.setForeground(Color.WHITE);
            frame1.getContentPane().add(r1,1);

            r3.setBounds(65,460,300,50);
            r3.setForeground(Color.WHITE);
            frame1.getContentPane().add(r3,1);

            r2.setBounds(350,400,300,50);
            r2.setForeground(Color.WHITE);
            frame1.getContentPane().add(r2,1);

            r4.setBounds(350,460,300,50);
            r4.setForeground(Color.WHITE);
            frame1.getContentPane().add(r4,0);


             p=new JLabel();
            p.setBounds(100,310,300,50);
            p.setForeground(Color.WHITE);
            frame1.getContentPane().add(p,1);


             rsel=new Respuesta();
            aaa=new Respuesta[4];
            v=new int[4];



        canc2.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
   
            primera.setVisible(true);
            pregunta.setVisible(false);
            question.setVisible(false);
            respv.setVisible(false);
            resv.setVisible(false);
            resp1.setVisible(false);
            res1.setVisible(false);
            resp2.setVisible(false);
            res2.setVisible(false);
            resp3.setVisible(false);
            res3.setVisible(false);
            guar1.setVisible(false);
            canc2.setVisible(false);
            cate.setVisible(false);
            categoria.setVisible(false);
        }
        });
        
          Agregar.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e){
     
            frame1.setEnabled(false);
            frame2.setVisible(true);
            clave.setText("");
            System.out.println("PRESIONADO");
      //      Agregar.setEnabled(false);

        }
        });

           comenzar.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e){

            selec=false;

            nombre_jugador=n.getText();
            framenp.setVisible(false);
            repintar();
            jugar(nump);

            t.start();
 /*
            rsel=new Respuesta();
            aaa=new Respuesta[4];
            v=new int[4];
                
            Pregunta obj = controlador.solicitar_pregunta(1);
            pre.setVisible(true);
            opca.setVisible(true);
            opcb.setVisible(true);
            opcc.setVisible(true);
            opcd.setVisible(true);
            aaa = obj.get_respuestas();
            
            
            Random or = new Random();
            for(int i=0;i<4;i++){
                int band=0;
                   while(band==0)
                   {band=1;
                    v[i]=or.nextInt(4);
                       for(int j=0;j<i;j++){
                        if(i!=j){
                          if(v[i]==v[j]){
                              band=0;
                              break;
                          }
                        }
                    }
                    
                   }
                System.out.println("*-> "+v[i]);
            }
            r1=new JLabel(aaa[v[0]].get_respuesta());
            r2=new JLabel(aaa[v[1]].get_respuesta());
            r3=new JLabel(aaa[v[2]].get_respuesta());
            r4=new JLabel(aaa[v[3]].get_respuesta());

            //System.out.println("mmmmmmmmmmmmmmmm "+aaa[v[3]].get_respuesta());
            r1.setBounds(65,400,300,50);
            r1.setForeground(Color.WHITE);
            frame1.getContentPane().add(r1,1);

            r3.setBounds(65,460,300,50);
            r3.setForeground(Color.WHITE);
            frame1.getContentPane().add(r3,1);

            r2.setBounds(350,400,300,50);
            r2.setForeground(Color.WHITE);
            frame1.getContentPane().add(r2,1);

            r4.setBounds(350,460,300,50);
            r4.setForeground(Color.WHITE);
            frame1.getContentPane().add(r4,0);

            p=new JLabel(obj.get_pregunta());
            p.setBounds(100,310,300,50);
            p.setForeground(Color.WHITE);
            frame1.getContentPane().add(p,1);

            r1.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[0]];
                System.out.println("rsel "+rsel.get_respuesta());
               // System.out.println("entro opcion a");
                opcbr.setVisible(false);opccr.setVisible(false);opcdr.setVisible(false);
                opcb.setVisible(true);opcc.setVisible(true);opcd.setVisible(true);
                opcar.setVisible(true);
               
            }
            });
            r2.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[1]];
                System.out.println("rsel "+rsel.get_respuesta());
               // System.out.println("entro opcoion b");
                opcb.setVisible(false);
                opcar.setVisible(false);opccr.setVisible(false);opcdr.setVisible(false);
                opca.setVisible(true);opcc.setVisible(true);opcd.setVisible(true);
                opcbr.setVisible(true);
            }
            });
            r3.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[2]];
                System.out.println("rsel "+rsel.get_respuesta());
                //System.out.println("entro opcoion c");
                opcc.setVisible(false);
                opcar.setVisible(false);opcbr.setVisible(false);opcdr.setVisible(false);
                opca.setVisible(true);opcb.setVisible(true);opcd.setVisible(true);
                opccr.setVisible(true);
            }
            });
            r4.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[3]];
                System.out.println("rsel "+rsel.get_respuesta());
              //  System.out.println("entro opcoion d");
                opcd.setVisible(false);
                             
                opcar.setVisible(false);opcbr.setVisible(false);opccr.setVisible(false);
                opca.setVisible(true);opcb.setVisible(true);opcc.setVisible(true);
                opcdr.setVisible(true);
            }
            });


*/


            }
          });


          nuevo.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e){
            framenp.setVisible(true);

        }
        });

        
        acep1.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
            String s=new String(clave.getPassword());            
            if(s.equals("19339207")){
                frame2.setVisible(false);
                frame1.setVisible(true);
                frame1.setEnabled(true);

                primera.setVisible(false);
                pregunta.setVisible(true);
                question.setVisible(true);
                respv.setVisible(true);
                resv.setVisible(true);
                resp1.setVisible(true);
                res1.setVisible(true);
                resp2.setVisible(true);
                res2.setVisible(true);
                resp3.setVisible(true);
                res3.setVisible(true);
                guar1.setVisible(true);
                canc2.setVisible(true);
                cate.setVisible(true);
                categoria.setVisible(true);
            }
        }
        });
        
        canc1.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
   
            frame2.setVisible(false);
            frame1.setEnabled(true);
            
        }
        });

        guar1.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e){
          controlador.agregar_pregunta(question.getText(), resv.getText(), res1.getText(), res2.getText(), res3.getText(),Integer.parseInt(categoria.getSelectedItem()));
           System.out.println("--> "+Integer.parseInt(categoria.getSelectedItem()));
           question.setText("");
           resv.setText("");
           res1.setText("");
           res2.setText("");
           res3.setText("");
           
         }
        });
         ti1=new ImageIcon("fuerati.png");
        fuerati=ti1.getImage();
         ti2=new ImageIcon("centroti.png");
       dentroti=ti2.getImage();

         t=new Timer(200,new ActionListener(){


            public void actionPerformed(ActionEvent e) {
                        angulo-=6;
                        contador--;
                        repintar();

                        if(angulo==0)
                        {
                            System.out.println("respondio"+String.valueOf(rsel.get_correcta()));
                            nump++;
                            angulo=360;
                            contador=60;
                            clearImage();
                        

                        if(rsel.get_correcta()==true)
                        {
                            JOptionPane.showMessageDialog(frame1,"Su respuesta fue Correcta","Resultado",JOptionPane.INFORMATION_MESSAGE);
                            jugar(nump);
                            t.start();
                        }
                        else
                           t.stop();


                        }
            }
	});


 }
  public void clearImage()
    {
        Graphics g =frame1.getGraphics();
        g.setColor(getBackground());
        g.fillRect(10, 60, fuerati.getWidth(comenzar), fuerati.getHeight(comenzar));
        g.dispose();
        repaint();
    }
 public void paintComponent(Graphics g){
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;

            pintarTodo(g2);
        }

 public void pintarTodo(Graphics2D g){
   
     g.setColor(Color.blue);
     g.fillArc(13, 63,226, 226, 90,-(360-angulo));
    
  
             g.drawImage(fuerati, 10, 60, frame1);
             g.drawImage(dentroti, 46, 96, frame1);
  g.setColor(Color.WHITE);
  g.setFont(new Font("Arial",Font.BOLD,60));
     g.drawString(String.valueOf(contador),95,200);



 }
public void repintar()
    {

    this.paintComponent(frame1.getGraphics());
    }

   public void jugar(int u){



            Pregunta obj = controlador.solicitar_pregunta(1);
            pre.setVisible(true);
            opca.setVisible(true);
            opcb.setVisible(true);
            opcc.setVisible(true);
            opcd.setVisible(true);
            aaa = obj.get_respuestas();


           
            for(int i=0;i<4;i++){
                int band=0;
                   while(band==0)
                   {band=1;
                    v[i]=or.nextInt(4);
                       for(int j=0;j<i;j++){
                        if(i!=j){
                          if(v[i]==v[j]){
                              band=0;
                              break;
                          }
                        }
                    }

                   }
                System.out.println("*-> "+v[i]);
            }
            r1.setText(aaa[v[0]].get_respuesta());
            r2.setText(aaa[v[1]].get_respuesta());
            r3.setText(aaa[v[2]].get_respuesta());
            r4.setText(aaa[v[3]].get_respuesta());

            //System.out.println("mmmmmmmmmmmmmmmm "+aaa[v[3]].get_respuesta());
            

            p.setText(obj.get_pregunta());

            r1.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[0]];
                System.out.println("rsel "+rsel.get_respuesta());
               // System.out.println("entro opcion a");
                opcbr.setVisible(false);opccr.setVisible(false);opcdr.setVisible(false);
                opcb.setVisible(true);opcc.setVisible(true);opcd.setVisible(true);
                opcar.setVisible(true);

            }
            });
            r2.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[1]];
                System.out.println("rsel "+rsel.get_respuesta());
               // System.out.println("entro opcoion b");
                opcb.setVisible(false);
                opcar.setVisible(false);opccr.setVisible(false);opcdr.setVisible(false);
                opca.setVisible(true);opcc.setVisible(true);opcd.setVisible(true);
                opcbr.setVisible(true);
            }
            });
            r3.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[2]];
                System.out.println("rsel "+rsel.get_respuesta());
                //System.out.println("entro opcoion c");
                opcc.setVisible(false);
                opcar.setVisible(false);opcbr.setVisible(false);opcdr.setVisible(false);
                opca.setVisible(true);opcb.setVisible(true);opcd.setVisible(true);
                opccr.setVisible(true);
            }
            });
            r4.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent r){
                rsel=aaa[v[3]];
                System.out.println("rsel "+rsel.get_respuesta());
              //  System.out.println("entro opcoion d");
                opcd.setVisible(false);

                opcar.setVisible(false);opcbr.setVisible(false);opccr.setVisible(false);
                opca.setVisible(true);opcb.setVisible(true);opcc.setVisible(true);
                opcdr.setVisible(true);
            }
            });

   }


    }

